#include "widget.h"
#include "ui_widget.h"
#include <thread>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置初始值
    ui->lcdNumber->display(10);

//    // 创建一个 QTimer 实例
//    timer = new QTimer(this);
//    // 把 QTimer 的 timeout 信号和咱们自己的槽函数进行连接
//    connect(timer, &QTimer::timeout, this, &Widget::handle);
//    // 启动定时器, 参数是触发 timeout 的周期. 单位是 ms
//    timer->start(1000);

    //-----------------------------------由于逻辑在构造函数内，当显示页面的时候，已经减为0
        int value = ui->lcdNumber->intValue();
        while (true) {
            // 调用thread，休眠 1s
            std::this_thread::sleep_for(std::chrono::seconds(1));
            if (value <= 0) {
                break;
            }
            value -= 1;
            ui->lcdNumber->display(value);
        }

    //----------------------------------------------让另一个线程去执行？no
    //Qtgui程序中保证：对页面的修改必须要在主线程中完成，gui程序内有多个状态，为了线程安全
//        std::thread t([this] () {
//            int value = this->ui->lcdNumber->intValue();
//            while (true) {
//                std::this_thread::sleep_for(std::chrono::seconds(1));
//                if (value <= 0) {
//                    break;
//                }
//                value -= 1;
//                ui->lcdNumber->display(value);
//            }
//        });
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handle()
{
    // 先拿到 LCDNumber 中的数字
    int value = ui->lcdNumber->intValue();
    if (value <= 0) {
        // 数字减到 0 了, 停止定时器.
        timer->stop();
        return;
    }
    ui->lcdNumber->display(value - 1);
}
